在Gazebo Garden中使创建好的机器人动起来

您所在的位置:网站首页 移动机器人教材 谢成钢 在Gazebo Garden中使创建好的机器人动起来

在Gazebo Garden中使创建好的机器人动起来

2024-07-10 18:31| 来源: 网络整理| 查看: 265

背景 系统

Ubuntu20.04

ROS版本

ROS2 Foxy 安装教程

Gazebo版本

Gazebo Garden 安装教程

在Gazebo中创建好一个机器人模型

创建教程

原版教程

Moving The Robot

移动机器人

在本教程中,我们将学习如何移动我们的机器人。我们将使用在“在Gazebo Garden中创建一个机器人”教程中构建的机器人。你可以从这里下载机器人。你也可以在这里找到本教程的成品世界描述文件。

什么是插件

为了让我们的机器人动起来,我们将使用 diff_drive 插件。但在此之前,让我们先回答一个问题:“什么是插件?”插件是作为共享库编译的代码块,并插入到模拟中。插件使我们能够控制模拟的许多方面,如世界、模型等。

Diff_drive 插件

diff_drive 插件可以帮助我们控制机器人,特别是可以进行差动驱动的机器人。让我们在机器人上设置该插件。打开 building_robot.sdf,并在 vehicle_blue 模型标签内添加以下代码:

left_wheel_joint right_wheel_joint 1.2 0.4 1 cmd_vel

标签有两个属性,filename 表示库文件名,name 表示插件名。在和 标签中,我们定义了连接机器人左右车轮和车身的关节,在我们的例子中是 left_wheel_joint 和 right_wheel_joint。表示两个车轮之间的距离。我们的机器人的左车轮在 y 轴上相对于底盘的位置是 0.6 米,右车轮在 y 轴上相对于底盘的位置是-0.6 米,因此轮距是 1.2 米。表示车轮的半径,它是在车轮链接的 标签下定义的。设置了发布里程计数据的频率,发布到 /model/vehicle_blue/odometry 路径下。cmd_vel 是 DiffDrive 插件的输入 。

话题和消息

现在我们的模型已经准备好了。我们只需要向它发送命令(消息)。这些消息将发布(发送)到上面定义的 cmd_vel 主题上。 topic只是为特定的一组消息或特定的服务定义的名称。我们的模型将订阅(监听)发送到 cmd_vel 主题上的消息。 启动机器人仿真世界:

gz sim building_robot.sdf

在另一个终端,让我们向我们的机器人发送一条消息:

gz topic -t "/cmd_vel" -m gz.msgs.Twist -p "linear: {x: 0.5}, angular: {z: 0.05}"

现在你应该看到你的机器人在仿真器中移动了。 注意: 别忘了在仿真器中按播放按钮启动仿真,不然机器人是不会有反应的。

该命令使用 -t 选项指定要发布到的主题。在 -m 之后,我们指定消息类型。我们的机器人期望 Twist 类型的消息,它由两个组件组成,线性和角度。在 -p 选项之后,我们指定消息的内容(值):线速度 x: 0.5 和角速度 z: 0.05。 提示:你可以使用这个命令来了解每个gz topic命令选项的作用:

gz topic -h

有关 Gazebo 中主题和消息的更多信息,请查看传输库教程。

使用键盘移动机器人

我们将使用键盘按键来发送消息,而不是从终端发送消息。为此,我们将添加两个新的插件:KeyPublisher 和 TriggeredPublisher。

Key Publisher

KeyPublisher 是一个 gz-gui 插件,用于读取键盘按键并将其发送到默认主题 /keyboard/keypress 上。我们可以按以下方式尝试此插件:

在一个终端中输入:gz sim building_robot.sdf 在右上角点击插件下拉列表(垂直省略号),然后点击 Key Publisher。在另一个终端中输入:gz topic -e -t /keyboard/keypress 最后一个命令将显示发送到 /keyboard/keypress 主题的所有消息。

在 Gazebo 窗口中按不同的键,你应该会在运行 gz topic -e -t /keyboard/keypress 命令的终端上看到数据(数字)。 在这里插入图片描述 我们希望将这些按键映射为 Twist 类型的消息,并将其发布到我们的模型正在监听的 /cmd_vel 主题上。TriggeredPublisher 插件将执行此操作。

Triggered Publisher

TriggeredPublisher 插件根据用户指定的条件,在响应输入消息时在输出主题上发布用户指定的消息。让我们在标签下添加以下代码:

16777235 linear: {x: 0.5}, angular: {z: 0.0}

这段代码定义了触发发布插件。它接受类型为 gz.msgs.Int32 的 /keyboard/keypress 主题上的消息,如果数据字段中的值与 16777235(向上箭头键)匹配,则在 cmd_vel 主题上输出一个 Twist 消息,其中 x 值为 0.5,z 值为 0.0。

现在启动 building_robot.sdf,然后添加 Key Publisher 插件,我们的机器人应该在我们按下向上箭头键 ↑ 时向前移动(确保你通过按下播放按钮启动仿真,以便在按下向上箭头键后看到机器人向前移动)。

接下来我们通过一个demo解释触发发布插件如何起作用。

通过方向键移动机器人

要查看按箭头键时在 /keyboard/keypress 主题上发送的值,可以使用 –echo 或 -e 选项。

在一个终端中运行模型:

gz sim building_robot.sdf

在右上角点击插件下拉列表(垂直省略号),然后点击 Key Publisher。

在另一个终端中运行以下命令:

gz topic -e -t /keyboard/keypress

开始按箭头键,看看它们给出的值:

Left ← : 16777234Up ↑ : 16777235Right → : 16777236Down ↓ : 16777237

我们将为每个箭头键添加触发发布插件。例如,对于向下箭头:

16777237 linear: {x: -0.5}, angular: {z: 0.0}

将每个箭头(按键)与所需的消息(移动)映射,就像我们对向后箭头所做的那样:

Left ➞ 16777234 ➞ linear: {x: 0.0}, angular: {z: 0.5}Up ➞ 16777235 ➞ linear: {x: 0.5}, angular: {z: 0.0}Right ➞ 16777236 ➞ linear: {x: 0.0}, angular: {z: -0.5}Down ➞ 16777237 ➞ linear: {x: -0.5}, angular: {z: 0.0}

现在轮到你尝试使用不同的键来移动机器人了。 在下一个教程中,你将学习如何使用 SDF 创建自己的仿真世界。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3